﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using OpenSource.UPnP;
using System.Xml;
using System.Windows.Markup;
using System.IO;
using System.Reflection;
using System.Collections;
using System.Windows.Threading;

namespace SurfaceServeur
{
   
	public class UPnPSurfaceServeur
	{
		private UPnPDevice root;
		private UPnPService list;


        static ArrayList _zoneFile = new ArrayList();


        static ArrayList _zonesresultatFinal = new ArrayList();
        
       
        static public Boolean visible = false;

        

        /**
        * \_zoneFile       ZonesresultatFinal contient le fichier de description sans le namespace.

        */
        static public ArrayList Zones
        { get { return _zoneFile; } set { _zoneFile = value; } }


        /**
        * \startUPnP       ZonesresultatFinal contient le resultat final.

        */
        static public ArrayList ZonesresultatFinal
        { get { return _zonesresultatFinal; } set { _zonesresultatFinal = value; } }


        /**
            * \UPnPSurfaceServeur      le constructeur du classe 'UPnPSurfaceServeur'

        */
        public UPnPSurfaceServeur(/*MainWindow mainw*/)
		{
            //mainwindow = mainw; 
            string s = "";
			root = UPnPDevice.CreateRootDevice(360, 1.0, "");
			root.FriendlyName = "UPnPSurfaceServeur";
            root.DeviceURN = "urn:schemas-upnp-org:device:UPnPSurfaceServeur:1";
			root.HasPresentation = false;
			root.Manufacturer = "sbai";
			root.ModelName = "UPnP sample for kids";
			root.UniqueDeviceName = "12345678-153f-430d-82f3-dff320c17501";

			list = new UPnPService(1.0, "Sample", "urn:schemas-upnp-org:service:Sample:1", true, this);
            list.AddStateVariable(new UPnPStateVariable("Text", s));

            
            list.AddMethod("loadFile");
           
			root.AddService(list);
			root.Advertise();
		}



        /**
        * \startUPnP       pour démarrer le device

        */
        public void startUPnP(){
			root.StartDevice();
            Console.WriteLine("Serveur start");
		}

        /**
        * \stopUPnP       pour arrêter le device
        */
		public void stopUPnP(){
			root.StopDevice();
            Console.WriteLine("Serveur stopped");
            
		}


        /**
        * \loadFile       pour télécharger le fichier de description
        * \param         InFile est le fichier de descrption passé sous forme d'une chaîne de caractères
        */
        public void loadFile(string InFile)
        {
           
            Console.WriteLine("file received: \n" + InFile);

            ///commande=namespace qui existe dans le fichier de description xaml
            string commande = InFile.Substring(InFile.IndexOf("x:Class"), InFile.IndexOf("  "));

            Console.WriteLine("la commande à afficher est: \n" + commande);

            ///j'ai supprimé le namespace
            InFile = InFile.Replace(commande, "");

            ///_zoneFile contient le fichier sans le namespace
            _zoneFile.Add(InFile);
           
            
        }

   
       
    }
}
